package com.hb.B_面向对象.A_类与继承

interface Flyer2{
    fun fly()
    fun kind()="flying animals"
}
interface Animal {
    val name:String
    fun eat()
    fun kind()="flying animals"
}

/**
 * Bird类同时实现了Flyer2，Animal接口，但由于他们都有默认的kind方法，同样会引起钻石问题。
 * kotlin提供了对应的方式来解决这个问题。那就是super关键字，我们可以用他来指定继承哪个父接口的方法
 * 比如  super<Flyer2>.kind()。当然我们也可以主动实现方法，覆盖父接口的方法。
 *
 * 实现接口的相关语法：
 * 1. 在kotlin实现一个接口的时候，小实现接口中没有默认实现的方法及未初始化的属性，若同时实现多个接口，
 * 而接口间又有相同方法名的默认实现的时候，则需要主动指定使用哪个接口的方法或者重写方法
 *
 * 2. 如果是默认的奇偶口方法，你可以实现类中通过"super<T>"这种方式去调用它，其中T为拥有该方法的接口名
 *
 * 3. 在实现接口的属性和方法的时候，都必须带上override关键字，不能省略
 */
class Bird6(override val name:String):Flyer2,Animal{
    override fun fly() {
        println("Bird6 fly")
    }

    override fun eat() {
        println("Bird6 eat")
    }

    override fun kind(): String {
      return super<Flyer2>.kind()
    }

}